#include <iostream>
#include <memory>
#include <string>
#include <rtc_base/thread.h>
#include <rtc_base/logging.h>
#include <thread>
#include <chrono>

// int main()
// {
//     std::cout << "hello world!" << std::endl;
//     RTC_LOG(LS_INFO) << "this is rtc::log";
//     // signaling_thread_
//     std::unique_ptr<rtc::Thread> signaling_thread_ = rtc::Thread::Create();
//     signaling_thread_->SetName("signaling_thread", nullptr);
//     signaling_thread_->Start();

//     // worker
//     std::unique_ptr<rtc::Thread> worker_thread_ = rtc::Thread::Create();
//     worker_thread_->SetName("worker_thread", nullptr);
//     worker_thread_->Start();
//     // network
//     std::unique_ptr<rtc::Thread> network_thread_ = rtc::Thread::CreateWithSocketServer();
//     network_thread_->SetName("network_thread", nullptr);
//     network_thread_->Start();
//     while (1)
//     {

//         std::this_thread::sleep_for(std::chrono::seconds(1));
//     }
// }

void RunPostTaskExample()
{
    // 创建一个新的线程
    std::unique_ptr<rtc::Thread> my_thread = rtc::Thread::Create();
    my_thread->Start(); // 启动线程

    // 使用 PostTask 异步执行任务
    my_thread->PostTask(RTC_FROM_HERE, []()
                        { 
                             std::this_thread::sleep_for(std::chrono::seconds(2));
                            std::cout << "This task is running asynchronously on another thread." << std::endl; });

    // 等待一段时间确保异步任务有机会执行
    std::cout << "this is main thread print." << std::endl;

    my_thread->Stop(); // 停止并清理线程
}

int main()
{
    RunPostTaskExample();
    return 0;
}

// void RunInvokeExample() {
//     // 创建一个新的线程
//    std::unique_ptr<rtc::Thread> my_thread = rtc::Thread::Create();
//     my_thread->Start(); // 启动线程

//     // 使用 Invoke 同步执行任务，并等待结果
//     int result = my_thread->Invoke<int>(RTC_FROM_HERE, [](){
//          std::this_thread::sleep_for(std::chrono::seconds(2));
//         std::cout << "This task is running synchronously and will return an integer." << std::endl;
//         return 42; // 返回值
//     });

//     std::cout << "The invoked task returned the value: " << result << std::endl;

//     my_thread->Stop(); // 停止并清理线程
// }

// int main() {
//     RunInvokeExample();
//     return 0;
// }